home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 7
/
Apprentice-Release7.iso
/
Source Code
/
Pascal
/
Snippets
/
PNL Libraries
/
MyGetZoneList.p
< prev
next >
Wrap
Text File
|
1996-06-01
|
2KB
|
100 lines
unit MyGetZoneList;
interface
uses
Types;
function MyGetMyZone: Str255;
function MyGetZoneList (datap: Ptr; var size: longint; var count: integer): OSErr;
function MyGetNextZone (var datap: Ptr): Str255;
implementation
uses
Appletalk,Devices;
function MyGetMyZone: Str255;
var
xpp: XPPParamBlock;
oe: OSErr;
s: Str255;
begin
xpp.zipInfoField[1] := 0;
xpp.zipInfoField[2] := 0;
xpp.xppTimeOut := 4;
xpp.xppRetry := 2;
xpp.zipBuffPtr := @s;
xpp.ioRefNum := XPPRefNum; { driver refNum -41 }
xpp.csCode := xCall;
xpp.xppSubCode := zipGetMyZone;
oe := PBControlSync(@xpp);
if oe <> noErr then
s := '*';
MyGetMyZone := s;
end;
procedure ClearBlock (cb: Ptr; size: longint);
var
p: longint;
begin
for p := longint(cb) to longint(cb) + size - 1 do
Ptr(p)^ := -27;
end;
function MyGetZoneList (datap: Ptr; var size: longint; var count: integer): OSErr;
var
xpp: XPPParamBlock;
oe: OSErr;
i: integer;
p: Ptr;
buffer: packed array[1..578] of Byte;
b: integer;
len: integer;
begin
ClearBlock(@xpp, sizeof(xpp));
xpp.ioRefNum := XPPRefNum; { driver refNum -41 }
xpp.csCode := xCall;
xpp.xppSubCode := zipGetZoneList;
xpp.xppTimeout := 4;
xpp.xppRetry := 2;
xpp.zipBuffPtr := @buffer;
xpp.zipInfoField[1] := 0;
xpp.zipInfoField[2] := 0;
count := 0;
p := datap;
repeat
oe := PBControlSync(@xpp);
if oe = noErr then begin
b := 1;
for i := 1 to xpp.zipNumZones do begin
len := buffer[b] + 1;
if size - (ord(p) + len - ord(datap)) > 0 then begin
BlockMove(@buffer[b], p, len);
p := Ptr(ord(p) + len);
end;
b := b + len;
end;
end;
count := count + xpp.zipNumZones;
until (oe <> noErr) or (xpp.zipLastFlag <> 0);
size := ord(p) - ord(datap);
if oe <> noErr then begin
size := 0;
count := 0;
end;
MyGetZoneList := oe;
end;
function MyGetNextZone (var datap: Ptr): Str255;
var
s: Str255;
len: integer;
begin
len := BAND(datap^, $FF);
BlockMove(datap, @s, len + 1);
datap := Ptr(ord(datap) + len + 1);
MyGetNextZone := s;
end;
end.